草庐IT

c++ - Visual C++ volatile

全部标签

c++ - C/C++ __restrict 类型

有没有一种方法可以使用typedef整数/浮点类型来定义这意味着没有别名?等同于(但原始结构)的东西:templatestructrestrict{T*__restrictdata;};作为相关问题,是否可以询问gcc它确定指针的别名/无别名是什么? 最佳答案 如评论中所述,许多较新的C++编译器确实支持restrict类型限定符的C99实现。由于restrict在C++中不是保留关键字,因此编译器通常使用__restrict或__restrict__。两者GCC和VisualC++很好地记录这一点,并明确引用C99。C++1998

c++ - 所有全局变量都应该是 volatile 限定的吗?

在此示例中,正确性是否需要将global_value声明为volatile?intglobal_value=0;voidfoo(){++global_value;}voidbar(){some_function(++global_value);foo();some_function(++global_value);}我的理解是volatile是“打算”用于pointerstomappedmemoryandvariableswhichcanbemodifiedbysignals的(强调不是线程安全)但很容易想象bar可能会编译成这样的东西:pushEAXmovEAX,global_val

c++ - const_cast<> 在 volatile 上的目的是什么?

我看到可以这样做,但我不明白其中的兴趣。 最佳答案 const和volatile听起来它们在变量上指的是相同的想法,但实际上并非如此。const变量不能被当前代码改变。volatile变量可能会被当前代码之外的某些外部实体更改。有可能有一个constvolatile变量——尤其是像内存映射寄存器这样的东西——在你的程序无法预测的时候被计算机改变,但你的代码不允许直接改变.您可以使用const_cast向变量添加或删除const或volatile(“cv-qualification”)。

c++ - 此多线程 C++ 代码中是否需要 'volatile'?

我用C++编写了一个Windows程序,它有时使用两个线程:一个后台线程用于执行耗时的工作;和另一个用于管理图形界面的线程。这样程序仍然响应用户,这是能够中止某个操作所必需的。线程通过共享的bool变量进行通信,当GUI线程向工作线程发出信号以中止时,该变量设置为true。以下是实现此行为的代码(我已删除不相关的部分):GUI线程执行的代码classProgressBarDialog:protectedDialog{/***Thispointstothevariablewhichtheworkerthreadreadstocheckifit*shouldabortornot.*/boo

c - 在设备固件中支持 WinUSB

我正在尝试设置一个USB设备,使其在连接到Windows8机器时自动使用WinUSB作为驱动程序,如所述here.它说:InorderfortheUSBdriverstacktoknowthatthedevicesupportsextendedfeaturedescriptors,thedevicemustdefineanOSstringdescriptorthatisstoredatstringindex0xEE.我的意思是我需要在内存位置0xEE处创建一个包含描述符的结构。我将如何在C中解决这个问题?这是我尝试过的://Thestructdefinitiontypedefstruc

c - x64 帧指针应该指向哪里,为什么指向? ( Windows x64 ABI)

我一直在阅读关于Windowsx64ABI的一长串非常好的文章。这些文章的一个非常次要的方面是帧指针的描述。一般要点是,由于Windowsx64调用堆栈规则非常严格,因此通常不需要专用的帧指针,尽管它是可选的。我一直注意到的一个异常(exception)是alloca()用于在堆栈上动态分配内存。这样做的函数显然需要一个帧指针。例如,引用Microsoft关于"StackAllocation"的文档(斜体和粗体由我添加):Ifspaceisdynamicallyallocated(alloca)inafunction,thenanonvolatileregistermustbeused

c++ - 用于读取输入文件的内存映射文件有多安全?

将输入文件映射到内存中,然后直接从映射的内存页中解析数据,是一种方便高效的从文件中读取数据的方法。但是,这种做法似乎从根本上来说也是不安全的,除非您可以确保没有其他进程写入映射文件,因为如果底层文件被另一个进程写入,即使私有(private)只读映射中的数据也可能发生变化。(POSIX例如doesn'tspecify“在建立MAP_PRIVATE映射后对底层对象所做的修改是否通过MAP_PRIVATE映射可见”。)如果你想在映射文件存在外部更改的情况下使你的代码安全,你必须仅通过volatile指针访问映射内存,然后非常小心你如何读取和验证输入,这对于许多用例来说似乎不切实际。这个分析

volatility取证

前言volatility是一款开源的内存取证分析工具,由python编写,支持各种操作系统,能够对导出的windows,linux,macosx,android等系统内存镜像进行分析。可以通过插件来拓展功能。私信助安社区公众号发送取证领取相关文件工具常见命令命令格式:volatility-f[镜像文件]--profile=[操作系统][插件参数]volatility-f文件名imageinfo 得到镜像的基本信息。volatility-f文件名--profile=系统pslist 查看进程信息volatility-f文件名--profile=系统pstree 查看进程树volatilit

JUC并发编程学习笔记(十六)Volatile

Volatile保证可见性privatevolatilestaticIntegernum=0;使用了volatile关键字,即可保证它本身可被其他线程的工作内存感知,即变化时也会被同步变化。不保证原子性原子性:不可分割线程A在执行任务时是不可被打扰的,也不能被分割,要么同时成功,要么同时失败。packageorg.example.tvolatile;publicclassVDemo02{//synchronized保证原子性,每次只有一条线程执行,所以结果准确//volatile不保证原子性,虽然也是同步机制,但是结果不准确privatevolatilestaticintnum=0;publi

Java并发编程-volatile

volatile是java虚拟机提供的一种轻量级的同步机制,它有三个重要的特性:保证可见性不保证原子性禁止指令重排要理解这三个特性,就需要对JMM(JAVA内存模型)有一定的了解才行。主要解决的问题:JVM中,每个线程都会存在本地内存,本地内存是公共内存的副本,各个线程的本地内存相互隔离,就会存在一个线程对共享变量做了修改,其他线程没有感知到的情况,从而导致数据不一致一、JMM(JAVA内存模型)JMM是Java虚拟机规范中所定义的一种内存模型,Java内存模型是标准化的,屏蔽掉了底层不同计算机的区别。也就是说,JMM是JVM中定义的一种并发编程的底层模型机制。JMM定义了线程和主内存(可以理